A computer system is generally defined in terms of three basic system elements: a central processing unit (CPU), memory, and input/output (I/O) peripheral devices. A typical computer system works with a computer program known as an operating system (OS). The OS is a program that manages all other programs in a computer, the user interface, the interface with peripheral devices, memory allocation, and so forth. Each OS is written for a variety of system configurations such as variable physical memory size, various numbers of peripherals connected to the system, etc. and thus it can remain ignorant of the actual system configuration.
On the other hand the basic input/output system (BIOS) is a computer program that uses the actual system configuration to manage data flow between the OS and attached memory and I/O peripherals. The BIOS can translate OS requests into concrete actions that the CPU can take in response. The BIOS is usually stored on a nonvolatile memory device such as a read-only memory (ROM) and may be programmed for the particular system configuration.
The BIOS also manages operation of the computer system after startup and before control is passed to the OS. The BIOS typically performs a memory check after power-on to determine whether the memory physically present in the system is operational and can be used by the OS, and takes corrective action if it finds any bad memory blocks. After completing the memory check and other startup tasks the BIOS passes control to the OS but thereafter is periodically called by the OS to perform system specific I/O functions.
Early personal computers (PCs) based on the IBM architecture and the DOS operating system showed the progress of the memory check on the screen. For early PCs with their relatively small amounts of memory (by today's standards) the memory check was a minor annoyance, and DOS displayed the progress of the memory check on the computer screen. As time went on, microprocessors and computer memories became faster. At the same time integrated circuit memories became cheap and new memory-intensive software programs were developed. Thus the length of the memory check at startup has remained a problem.
Furthermore certain computer applications such as servers are memory intensive. Thus the amount of time required for the memory check would delay normal system operation so long as to be a nuisance to users. One solution to this problem is to merely sample test a certain portion of the memory at startup. While this allows some memory testing to take place at startup before control is passed to the operating system, the amount of memory coverage at startup using such a scheme is low.
Thus it would be desirable to increase the amount of memory that can be tested at system startup without causing an annoyingly long delay, or alternatively to shorten the time required by the memory check to allow more memory to be tested in a given period of time. These and other desirable features and characteristics of the present invention will become apparent from the subsequent detailed description and the appended claims, taken in conjunction with the accompanying drawings and the foregoing technical field and background.